92 反转链表 II
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5] 示例 2:
输入:head = [5], left = 1, right = 1 输出:[5]
相当于把中间那段反过来 先找到后面的 5 是 cur 4 是 pre p0 的 next 指向 pre p0 是翻转这一段的上一个节点 再找到前面的 p0 next 指向 cur
ts
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function reverseBetween(head: ListNode | null, left: number, right: number): ListNode | null {
let dummy = new ListNode(0,head)
let p0 = dummy
for (let i = 0; i < left - 1; i++) {
p0 = p0.next
}
let pre
let cur = p0.next
for (let i = 0; i < right - left + 1; i++) {
let nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
}
p0.next.next = cur
p0.next = pre
return dummy.next
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dummy 哨兵节点为了解决 left=1 的情况